长度: 5
| 类别 | 代表函数 | 金融应用场景 |
|---|---|---|
| 数学运算 | abs(), round(), sum() |
收益计算,四舍五入 |
| 序列操作 | len(), max(), min(), sorted() |
价格排序,极值查找 |
| 迭代器 | map(), filter(), zip() |
数据转换,批量处理 |
| 类型转换 | int(), float(), str() |
数据清洗,类型转换 |
| 输入输出 | print(), input(), open() |
数据读取,结果输出 |
# 注:该代码块包含未完成的填空代码,需要在平台上完成
# ⚠️ 平台原始代码 - 请原样输入至教学平台(注释除外),平台才会判定答案正确
#任务一
stock = ["中信证券","华泰证券","国泰君安","招商证券","中国银河","广发证券","中信建投","国信证券","中金公司","申万宏源"]
print(len(stock)) #计算列表中元素的个数
print(list(enumerate(stock,start=1))) #创建带有索引并且以列表方式分输出
#任务二
profit = [205.39,130.36,98.85,87.69,78.84,78.63,70.47,64.27,61.64,54.75]
stock = ["中信证券","华泰证券","国泰君安","招商证券","中国银河","广发证券","中信建投","国信证券","中金公司","申万宏源"] # 定义列表stock
profit_total = sum(profit) #计算10家证券公司的净利润总和
profit_average = profit_total/len(stock) # 获取数据长度
print("2023年净利润排名前10位的证券公司净利润总和(亿元)",profit_total) # 输出2023年净利润排名前10位的证券公司净利润总和(
print("2023年净利润排名前10位的证券公司净利润平均数(亿元)",round(profit_average,4)) # 输出2023年净利润排名前10位的证券公司净利润平均数
#任务三
return_Q1 = [-0.0588,-0.0067,-0.0698,0.0239,-0.0059,-0.0672,-0.0739,-0.0193,-0.1543,0.0046]
return_max = max(return_Q1) #找出最大涨幅
return_min = min(return_Q1) #找出最小涨幅
print("2024年1季度股价的最大涨幅",return_max) # 输出2024年1季度股价的最大涨幅
print("2024年1季度股价的最小涨幅",return_min) # 输出2024年1季度股价的最小涨幅
price = [18.73,13.61,13.47,13.71,11.76,13.05,21.68,8.11,32.03,4.40] # 定义列表price
price_sorted = sorted(price) #将股价由小到大排序
print(price_sorted) # 输出价格数据
#任务四
stock = ["中信证券","华泰证券","国泰君安","招商证券","中国银河","广发证券","中信建投","国信证券","中金公司","申万宏源"]
# 定义列表code
code = ["600030","601688","601211","600999","601881","000776","601066","002736","601995","000166"]
profit = [205.39,130.36,98.85,87.69,78.84,78.63,70.47,64.27,61.64,54.75] # 定义列表profit
# 定义列表return_Q1
return_Q1 = [-0.0588,-0.0067,-0.0698,0.0239,-0.0059,-0.0672,-0.0739,-0.0193,-0.1543,0.0046]
price = [18.73,13.61,13.47,13.71,11.76,13.05,21.68,8.11,32.03,4.40] # 定义列表price
print(list(zip(stock,code,profit,return_Q1,price))) #将多个列表中对应的元素打包为一个元组并以列表方式输出
#任务五
fund = 1e7 #H公司的投资资金额
price_huatai = 13.76 #华泰证券股票
N = 100 # 设置期数/数量为100
share = N*int(fund/(price_huatai*N)) # 将数据转换为整数
print("H公司购买华泰证券的股票数量",share) # 输出H公司购买华泰证券的股票数量len() — 获取序列长度len(序列)max() 和 min() — 求极值max() 返回序列中的最大值min() 返回序列中的最小值key 参数指定比较依据max() / min() 的高级用法:key参数key 参数指定用于比较的函数# 找出PE最高和价格最低的股票
portfolio = [
{'name': '茅台', 'price': 1850, 'pe': 45},
{'name': '五粮液', 'price': 220, 'pe': 32},
{'name': '招商银行', 'price': 45, 'pe': 8}
]
highest_pe = max(portfolio, key=lambda x: x['pe'])
print(f'PE最高: {highest_pe["name"]}, PE={highest_pe["pe"]}')
lowest_price = min(portfolio, key=lambda x: x['price'])
print(f'价格最低: {lowest_price["name"]}, 价格={lowest_price["price"]}')PE最高: 茅台, PE=45
价格最低: 招商银行, 价格=45
sum() — 计算序列和sum(可迭代对象, 初始值=0)sorted() — 排序reverse=True 可实现降序排序abs() 和 round() — 数值处理abs(x):返回绝对值round(x, n):四舍五入到 n 位小数pow() — 幂运算pow(底数, 指数) 等价于 底数 ** 指数pow(x, y, mod) 等价于 (x ** y) % mod# 收益率序列
returns = [0.05, -0.02, 0.03, 0.07, -0.01]
# 平均收益率
avg_return = sum(returns) / len(returns)
print(f'平均收益率: {avg_return:.2%}')
# 最大收益和最大亏损
print(f'最大收益: {max(returns):.2%}')
print(f'最大亏损: {min(returns):.2%}')
# 极差(Range)
range_value = max(returns) - min(returns)
print(f'收益极差: {range_value:.2%}')平均收益率: 2.40%
最大收益: 7.00%
最大亏损: -2.00%
收益极差: 9.00%
map() — 映射函数到每个元素map(函数, 可迭代对象)list() 转换filter() — 过滤元素filter(函数, 可迭代对象)True 时保留元素lambda 表达式使用zip() — 配对多个序列enumerate() — 带索引遍历enumerate(可迭代对象, start=0)(索引, 元素) 的迭代器start 参数设置起始索引map() / filter() 与列表推导式对比zip() 的解包操作zip(*) 可实现反向解包# 原始数据:字符串格式的价格和数量
raw_data = [
('10.5', '100'),
('20.3', '200'),
('15.8', '150')
]
# 使用 map() 进行数据转换
prices = list(map(lambda x: float(x[0]), raw_data))
quantities = list(map(lambda x: int(x[1]), raw_data))
# 计算每笔交易金额
amounts = list(map(lambda p, q: p * q, prices, quantities))
print(f'交易金额: {amounts}')
# 过滤出金额大于2000的交易
large_trades = list(filter(lambda x: x > 2000, amounts))
print(f'大额交易: {large_trades}')交易金额: [1050.0, 4060.0, 2370.0]
大额交易: [4060.0, 2370.0]
returns = [0.05, -0.02, 0.03, 0.07, -0.01]
cum_return = 1.0 # 初始累计收益
max_drawdown = 0 # 最大回撤
peak = 1.0 # 历史峰值
for r in returns:
cum_return *= (1 + r) # 更新累计收益
if cum_return > peak:
peak = cum_return # 更新历史峰值
drawdown = (peak - cum_return) / peak # 计算当前回撤
max_drawdown = max(max_drawdown, drawdown)
print(f'最大回撤: {max_drawdown:.2%}')最大回撤: 2.00%
import math
returns = [0.05, -0.02, 0.03, 0.07, -0.01]
mean = sum(returns) / len(returns)
# 计算标准差
variance = sum((r - mean) ** 2 for r in returns) / len(returns)
std_dev = math.sqrt(variance)
# 假设无风险利率2%(年化),252个交易日
risk_free_rate = 0.02
sharpe_ratio = (mean * 252 - risk_free_rate) / (std_dev * math.sqrt(252))
print(f'年化夏普比率: {sharpe_ratio:.2f}')年化夏普比率: 11.04
returns = [0.05, -0.02, 0.03, 0.07, -0.01]
# 统计正收益天数
positive_count = len([r for r in returns if r > 0])
print(f'正收益次数: {positive_count}/{len(returns)}')
# 计算中位数
sorted_returns = sorted(returns)
n = len(sorted_returns)
if n % 2 == 0:
median = (sorted_returns[n//2 - 1] + sorted_returns[n//2]) / 2
else:
median = sorted_returns[n//2]
print(f'中位数收益率: {median:.2%}')正收益次数: 3/5
中位数收益率: 3.00%
all() 和 any() 函数all():所有元素为 True 时返回 Trueany():任一元素为 True 时返回 Truemap/filter:更Pythonic、更易读过滤偶数后: [1, 3, 5]
[1]
[1]
[商业大数据分析与应用]